package com.zenithmind.note.service;

import com.zenithmind.note.pojo.dto.NoteShareDTO;
import com.zenithmind.note.pojo.entity.NoteShare;
import com.zenithmind.note.pojo.query.NoteShareQuery;
import com.zenithmind.note.pojo.query.UserShareQuery;
import com.zenithmind.note.pojo.vo.NoteShareVO;
import com.zenithmind.note.pojo.vo.NoteVO;
import com.zenithmind.common.result.PageResult;
import com.zenithmind.common.result.Result;

import java.util.List;

/**
 * 笔记分享服务接口
 */
public interface NoteShareService {
    
    /**
     * 创建分享 - 内部获取当前用户ID
     *
     * @param noteShareDTO 分享DTO
     * @return 分享视图对象
     */
    NoteShareVO createShare(NoteShareDTO noteShareDTO);
    
    /**
     * 创建分享 - 外部传入用户ID
     *
     * @param noteShareDTO 分享DTO
     * @param userId       用户ID
     * @return 分享视图对象
     */
    NoteShareVO createShare(NoteShareDTO noteShareDTO, String userId);
    
    /**
     * 获取分享详情
     *
     * @param shareId 分享ID
     * @return 分享视图对象
     */
    NoteShareVO getShareDetail(String shareId);
    
    /**
     * 通过分享码获取笔记
     *
     * @param shareCode 分享码
     * @return 笔记视图对象
     */
    NoteVO getNoteByShareCode(String shareCode);
    
    /**
     * 取消分享 - 内部获取当前用户ID
     *
     * @param shareId 分享ID
     * @return 取消分享结果
     */
    Result<Boolean> cancelShare(String shareId);
    
    /**
     * 取消分享 - 外部传入用户ID
     *
     * @param shareId 分享ID
     * @param userId 用户ID
     * @return 取消分享结果
     */
    Result<Boolean> cancelShare(String shareId, String userId);
    
    /**
     * 获取用户分享列表 - 内部获取当前用户ID
     *
     * @param current 当前页
     * @param size    每页大小
     * @return 分页结果
     */
    PageResult<NoteShareVO> getUserShares(long current, long size);
    
    /**
     * 获取用户分享列表 - 外部传入用户ID
     *
     * @param userId  用户ID
     * @param current 当前页
     * @param size    每页大小
     * @return 分页结果
     */
    PageResult<NoteShareVO> getUserShares(String userId, long current, long size);
    
    /**
     * 后台管理-分页查询分享记录
     *
     * @param query 查询对象
     * @return 分页结果
     */
    PageResult<NoteShareVO> shareManagePage(NoteShareQuery query);
    
    /**
     * 后台管理-获取分享详情
     *
     * @param shareId 分享ID
     * @return 分享详情
     */
    NoteShareVO getShareById(String shareId);
    
    /**
     * 后台管理-添加或修改分享记录
     *
     * @param share 分享实体
     * @return 分享视图对象
     */
    NoteShareVO addOrUpdateShare(NoteShare share);
    
    /**
     * 后台管理-批量删除分享记录
     *
     * @param ids 分享ID列表
     */
    void deleteBatch(List<String> ids);
    
    /**
     * 后台管理-批量更新分享状态
     *
     * @param ids    分享ID列表
     * @param status 状态
     */
    void batchUpdateStatus(List<String> ids, Integer status);
    
    /**
     * 增加分享访问次数
     *
     * @param shareCode 分享码
     */
    void incrementViewCount(String shareCode);
    
    /**
     * 获取用户分享列表 - 使用查询对象
     *
     * @param query 查询对象
     * @return 分页结果
     */
    PageResult<NoteShareVO> getUserSharePage(UserShareQuery query);
} 